/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ru.icq.utils;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Toolkit;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import javax.swing.JOptionPane;

/**
 * Класс полезных утилиток.
 * @author Носов А.В.
 */
public class Utils {

    /**
     * Устанавливает окно по центру экрана.
     * @param component окно
     */
    public static void setFrameCenter(Component component) {
        Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
        int x = (int) ((dimension.getWidth() - component.getWidth()) / 2);
        int y = (int) ((dimension.getHeight() - component.getHeight()) / 2);
        component.setLocation(x, y);
    }

    /**
     * Центрирует модальное окно отностительно радителя
     * @param parent родитель
     * @param child ребенок
     * @return точка центра
     */
    public static Point getCenterFrame(Component parent, Component child) {
        if ((parent == null) || (child == null)) return new Point(0, 0);
        Point point = new Point();
        double x = parent.getX();
        double y = parent.getY();
        double h1 = parent.getHeight();
        double w1 = parent.getWidth();
        double h2 = child.getHeight();
        double w2 = child.getWidth();
        
        point.setLocation((x+(w1-w2)/2), (y+(h1-h2)/2));
        
        return point;
    }

    /**
     * Расставляет ширину колонок в таблице по названию колонок.
     * @param aTable таблица в которой надо выставить ширину
     */
    public static void setColumnWeght(javax.swing.JTable aTable) {
        for(int i = 0; i < aTable.getColumnModel().getColumnCount(); i++) {
            String name = aTable.getColumnModel().getColumn(i).getHeaderValue().toString(); //это конечно если в заголовки String
            java.awt.FontMetrics fm = aTable.getTableHeader().getFontMetrics(aTable.getTableHeader().getFont());
            //10 - это порсто для лучшего внешнего вида. А то он слишком точно считает. Справа и слева совсем не остается места.
            aTable.getColumnModel().getColumn(i).setPreferredWidth(fm.stringWidth(name)+10);
        }
    }

    /**
     * Изменения в программе.
     */
    public void isShowAboutMessage() {
        JOptionPane.showMessageDialog(null,
                "<html>" +
                "<h2>Изменения в программе: (v0.1.0.0)</h2>" +
                "<p>&nbsp;&nbsp;&nbsp;- ;" +
                "</html>",
                "О программе... ()",
                javax.swing.JOptionPane.OK_OPTION/*,
                new javax.swing.ImageIcon(getClass().getResource("/ru/niir/utilPack/icon/niir.gif"))*/);
    }

    /**
     * Выводит сообщение об ошибки.
     * @param parent родитель
     * @param msg сообщение об ошибки
     */
    public static void isShowErrorMessage(Component parent, String msg) {
        JOptionPane.showMessageDialog(parent, msg, "Ошибка...", JOptionPane.ERROR_MESSAGE);
    }

    /**
     * Возвращает название операционной системы.
     */
    public static String getOSName() {
        return System.getProperty("os.name");
    }

    /**
     * Возвращает 
     * @param b ресурс
     * @param name название
     * @return
     */
    public static String getString(ResourceBundle b, String name) {
        String result;
        try {
            Locale locale = b.getLocale();
            if (locale == null || locale.getLanguage().equals("")) {
                locale = new Locale(System.getProperty("user.language"));
            }
            result = b.getString(name+"."+locale.getLanguage());
        } catch (MissingResourceException ex) {
            result = name;
        }
        return result;
    }

    /**
     * Возвращает из строки только числа.
     * @param s строка
     * @return число, если ничего не найдено то -1
     */
    public static long getLong(String s) {
        String[] numbers = s.split("[^0-9]");
        s = "";
        for (int i = 0; i < numbers.length; i++) {
            if (numbers[i].trim().equals("")) continue;
            s += numbers[i];
        }
        try {
            return Long.valueOf(s);
        } catch (NumberFormatException ex) {
            return -1;
        }
    }
}
